package org.tri.entity;

import java.util.Date;
import java.util.List;
import org.tri.entity.AbstractAnimal;
import org.tri.entity.Establecimiento;

/**
 * La interfaz {@code Transaccion} permite manejar compras y ventas utilizando
 * métodos comunes, para poder realizar tareas que implican ambas transacciones.
 * @author kiira
 * @version 1.0, Jan 9, 2012
 */
public interface Transaccion {
    /**
     * Devuelve la fecha en la que se realizo la transacción.
     * @return fecha de la transacción.
     */
    public Date obtenerFecha();
    
    /**
     * Devuelve una descripción del tipo de movimiento de animales que la
     * transacción implica.
     * @return descripción del tipo de movimiento.
     */
    public String obtenerTipoMovimiento();
    
    /**
     * Devuelve un número de comprobante propio del tipo de transacción.
     * @return número de comprobante de la transacción.
     */
    public long obtenerNroComprobante();
    
    /**
     * Devuelve el establecimiento al que la transacción esta ligada.
     * @return establecimiento que le corresponde a la transacción.
     */
    public Establecimiento obtenerEstablecimiento();
    
    /**
     * Indica si esta transacción implica una ENTRADA de anmimales. En caso 
     * contrario, la transacción implica una SALIDA.
     * @return <list>true si es una entrada. <list>false si es una salida.
     */
    public boolean esEntrada();
    
    /**
     * Devuelve la lista de animales correspondientes a la transacción.
     * @return lista de {@code AbstractAnimal} correspondientes a la venta.
     */
    public List<AbstractAnimal> obtenerAnimales();
    
    /**
     * Devuelve la cantidad de animales involucrados en la transacción.
     * @return int Cantidad de animales involucrados.
     */
    public int obtenerCantidadAnimales();
    
}//end interfaz Transaccion

